home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / pvm34b3.zip / pvm34b3 / pvm3 / tracer / cmd.c next >
C/C++ Source or Header  |  1997-07-22  |  6KB  |  359 lines

  1.  
  2. static char rcsid[] =
  3.     "$Id: cmd.c,v 4.4 1997/06/25 21:44:31 pvmsrc Exp $";
  4.  
  5. /*
  6.  *         Tracer version 1.0:  A Trace File Generator for PVM
  7.  *           Oak Ridge National Laboratory, Oak Ridge TN.
  8.  *           Authors:  James Arthur Kohl and G. A. Geist
  9.  *                   (C) 1994 All Rights Reserved
  10.  *
  11.  *                              NOTICE
  12.  *
  13.  * Permission to use, copy, modify, and distribute this software and
  14.  * its documentation for any purpose and without fee is hereby granted
  15.  * provided that the above copyright notice appear in all copies and
  16.  * that both the copyright notice and this permission notice appear
  17.  * in supporting documentation.
  18.  *
  19.  * Neither the Institution, Oak Ridge National Laboratory, nor the
  20.  * Authors make any representations about the suitability of this
  21.  * software for any purpose.  This software is provided ``as is''
  22.  * without express or implied warranty.
  23.  *
  24.  * Tracer was funded by the U.S. Department of Energy.
  25.  */
  26.  
  27.  
  28. /* Tracer Headers */
  29.  
  30. #include "tracer.h"
  31.  
  32. #include "trcglob.h"
  33.  
  34.  
  35. /* Command Routines */
  36.  
  37. int
  38. mask_proc( ac, av )
  39. int ac;
  40. char **av;
  41. {
  42.     char name[255];
  43.  
  44.     int on_off;
  45.     int set;
  46.     int e;
  47.     int i;
  48.  
  49.     /* No Args */
  50.  
  51.     if ( ac == 1 )
  52.     {
  53.         printf( "\nTrace Mask:\n\n" );
  54.  
  55.         trc_print_tmask( TRACE_MASK );
  56.  
  57.         printf( "\n" );
  58.  
  59.         return( TRC_TRUE );
  60.     }
  61.  
  62.     /* Parse Command Args */
  63.  
  64.     on_off = TRC_TRUE;
  65.  
  66.     set = 0;
  67.  
  68.     for ( i=1 ; i < ac ; i++ )
  69.     {
  70.         if ( !strcmp( av[i], "+" ) )
  71.             on_off = TRC_TRUE;
  72.  
  73.         else if ( !strcmp( av[i], "-" ) )
  74.             on_off = TRC_FALSE;
  75.  
  76.         else if ( !strcmp( av[i], "default" )
  77.             || !strcmp( av[i], "xpvm" )
  78.             || !strcmp( av[i], "XPVM" ) )
  79.         {
  80.             TEV_MASK_INIT( TRACE_MASK );
  81.  
  82.             TEV_MASK_SET( TRACE_MASK, TEV_BARRIER );
  83.             TEV_MASK_SET( TRACE_MASK, TEV_BCAST );
  84.             TEV_MASK_SET( TRACE_MASK, TEV_JOINGROUP );
  85.             TEV_MASK_SET( TRACE_MASK, TEV_LVGROUP );
  86.             TEV_MASK_SET( TRACE_MASK, TEV_MYTID );
  87.             TEV_MASK_SET( TRACE_MASK, TEV_PARENT );
  88.             TEV_MASK_SET( TRACE_MASK, TEV_SPAWN );
  89.             TEV_MASK_SET( TRACE_MASK, TEV_SENDSIG );
  90.             TEV_MASK_SET( TRACE_MASK, TEV_KILL );
  91.             TEV_MASK_SET( TRACE_MASK, TEV_EXIT );
  92.             TEV_MASK_SET( TRACE_MASK, TEV_MCAST );
  93.             TEV_MASK_SET( TRACE_MASK, TEV_SEND );
  94.             TEV_MASK_SET( TRACE_MASK, TEV_RECV );
  95.             TEV_MASK_SET( TRACE_MASK, TEV_RECVF );
  96.             TEV_MASK_SET( TRACE_MASK, TEV_NRECV );
  97.             TEV_MASK_SET( TRACE_MASK, TEV_PSEND );
  98.             TEV_MASK_SET( TRACE_MASK, TEV_PRECV );
  99.             TEV_MASK_SET( TRACE_MASK, TEV_TRECV );
  100.             TEV_MASK_SET( TRACE_MASK, TEV_PROBE );
  101.             TEV_MASK_SET( TRACE_MASK, TEV_USER_DEFINED );
  102.  
  103.             set++;
  104.         }
  105.  
  106.         else if ( !strcmp( av[i], "*" ) )
  107.         {
  108.             for ( e=TEV_FIRST ; e <= TEV_MAX ; e++ )
  109.             {
  110.                 if ( on_off )
  111.                     TEV_MASK_SET( TRACE_MASK, e );
  112.  
  113.                 else
  114.                     TEV_MASK_UNSET( TRACE_MASK, e );
  115.             }
  116.  
  117.             set++;
  118.         }
  119.  
  120.         else
  121.         {
  122.             if ( !strncmp( av[i], "pvm_", 4 ) )
  123.                 strcpy( name, av[i] + 4 );
  124.  
  125.             else
  126.                 strcpy( name, av[i] );
  127.  
  128.             for ( e=TEV_FIRST ; e <= TEV_MAX ; e++ )
  129.             {
  130.                 if ( !strcmp( pvmtevinfo[e].name, name )
  131.                     || !strcmp( pvmtevinfo[e].name, av[i] ) )
  132.                 {
  133.                     break;
  134.                 }
  135.             }
  136.  
  137.             if ( e <= TEV_MAX )
  138.             {
  139.                 if ( on_off )
  140.                     TEV_MASK_SET( TRACE_MASK, e );
  141.  
  142.                 else
  143.                     TEV_MASK_UNSET( TRACE_MASK, e );
  144.  
  145.                 set++;
  146.             }
  147.  
  148.             else
  149.                 printf( "No such event \"%s\"\n", av[i] );
  150.         }
  151.     }
  152.  
  153.     /* Install New Trace Mask */
  154.  
  155.     if ( set )
  156.     {
  157.         pvm_settmask( PvmTaskChild, TRACE_MASK );
  158.  
  159.         printf( "\nNew Trace Mask:\n\n" );
  160.  
  161.         trc_print_tmask( TRACE_MASK );
  162.  
  163.         printf( "\n" );
  164.  
  165.         re_register_tracer();
  166.     }
  167.  
  168.     return( TRC_TRUE );
  169. }
  170.  
  171.  
  172. int
  173. buffer_proc( ac, av )
  174. int ac;
  175. char **av;
  176. {
  177.     int nbytes;
  178.  
  179.     if ( ac == 1 )
  180.     {
  181.         printf( "\nCurrent Trace Buffer Size is %d Bytes\n\n",
  182.             TRACE_BUF );
  183.  
  184.         return( TRC_TRUE );
  185.     }
  186.  
  187.     nbytes = atoi( av[1] );
  188.  
  189.     nbytes = nbytes < 0 ? 0 : nbytes;
  190.  
  191.     TRACE_BUF = nbytes;
  192.  
  193.     pvm_setopt( PvmTraceBuffer, TRACE_BUF );
  194.  
  195.     re_register_tracer();
  196.  
  197.     return( TRC_TRUE );
  198. }
  199.  
  200.  
  201. int
  202. options_proc( ac, av )
  203. int ac;
  204. char **av;
  205. {
  206.     int cc = TRC_TRUE;
  207.  
  208.     if ( ac == 1 )
  209.     {
  210.         printf( "\nCurrent Tracing Option is " );
  211.         
  212.         switch ( TRACE_OPT )
  213.         {
  214.             case PvmTraceFull:
  215.                 printf( "full.\n\n" );
  216.                 break;
  217.  
  218.             case PvmTraceTime:
  219.                 printf( "time.\n\n" );
  220.                 break;
  221.  
  222.             case PvmTraceCount:
  223.                 printf( "count.\n\n" );
  224.                 break;
  225.  
  226.             default:
  227.                 printf( "undefined!\n\n" );
  228.                 cc = TRC_FALSE;
  229.         }
  230.         
  231.         return( cc );
  232.     }
  233.  
  234.     if ( !strcmp( av[1], "full" ) )
  235.         TRACE_OPT = PvmTraceFull;
  236.     
  237.     else if ( !strcmp( av[1], "time" ) )
  238.         TRACE_OPT = PvmTraceTime;
  239.  
  240.     else if ( !strcmp( av[1], "count" ) )
  241.         TRACE_OPT = PvmTraceCount;
  242.  
  243.     else
  244.     {
  245.         printf( "\nUnknown Trace Option \"%s\".\n\n", av[1] );
  246.  
  247.         return( TRC_FALSE );
  248.     }
  249.  
  250.     pvm_setopt( PvmTraceOptions, TRACE_OPT );
  251.  
  252.     re_register_tracer();
  253.  
  254.     return( cc );
  255. }
  256.  
  257.  
  258. void
  259. re_register_tracer()
  260. {
  261.     /* Re-Register Tracer */
  262.  
  263.     if ( TRACER_REGISTERED )
  264.     {
  265.         if ( pvm_reg_tracer( -1, -1, -1, -1, CLEAR_MASK, -1, -1 ) > 0 )
  266.         {
  267.             printf( "Error Unregistering Tracer...  Exiting.\n" );
  268.  
  269.             exit( -1 );
  270.         }
  271.  
  272.         else
  273.             TRACER_REGISTERED = TRC_FALSE;
  274.     }
  275.  
  276.     if ( pvm_reg_tracer( pvm_getcontext(), 666, pvm_getcontext(), 667,
  277.         TRACE_MASK, TRACE_BUF, TRACE_OPT ) < 0 )
  278.     {
  279.         printf( "Tracer Already Connected...  Exiting.\n" );
  280.  
  281.         exit( -1 );
  282.     }
  283.  
  284.     else
  285.         TRACER_REGISTERED = TRC_TRUE;
  286. }
  287.  
  288.  
  289. int
  290. help_proc( ac, av )
  291. int ac;
  292. char **av;
  293. {
  294.     int i;
  295.  
  296.     /* General Help */
  297.  
  298.     if ( ac == 1 )
  299.     {
  300.         printf( "\nTracer %s\n\n", TRC_VERSION );
  301.  
  302.         printf( "mask      - display or modify the trace mask.\n" );
  303.         printf( "buffer    - display or set the trace buffer size.\n" );
  304.         printf( "options   - display or set the trace options.\n" );
  305.         printf( "help      - display this help information.\n" );
  306.         printf( "help cmd  - display help information for cmd.\n" );
  307.  
  308.         printf( "quit      - close trace file and exit tracer.\n" );
  309.  
  310.         printf( "\n" );
  311.  
  312.         return( TRC_TRUE );
  313.     }
  314.  
  315.     /* Dump Usage for Command */
  316.  
  317.     for ( i=1 ; i < ac ; i++ )
  318.     {
  319.         if ( !strcmp( av[i], "mask" ) )
  320.         {
  321.             printf(
  322.         "usage:  mask [ [+|-] [ event | * ] ] [ default | xpvm ]\n" );
  323.         }
  324.  
  325.         else if ( !strcmp( av[i], "buffer" ) )
  326.             printf( "usage:  buffer [ nbytes ]\n" );
  327.  
  328.         else if ( !strcmp( av[i], "options" ) )
  329.             printf( "usage:  options [ full | time | count ]\n" );
  330.  
  331.         else
  332.         {
  333.             printf( "No Help Available for \"%s\"\n", av[i] );
  334.  
  335.             return( TRC_FALSE );
  336.         }
  337.     }
  338.  
  339.     return( TRC_TRUE );
  340. }
  341.  
  342.  
  343. void
  344. quit_proc( ac, av )
  345. int ac;
  346. char **av;
  347. {
  348.     printf( "Quitting Tracer.\n" );
  349.  
  350.     if ( TRACER_REGISTERED )
  351.         pvm_reg_tracer( -1, -1, -1, -1, CLEAR_MASK, -1, -1 );
  352.  
  353.     if ( ID->trace_out != NULL && ID->trace_out != stdout )
  354.         fclose( ID->trace_out );
  355.  
  356.     exit( -1 );
  357. }
  358.  
  359.